package com.cuz.daileetcode;

public class Day37 {


    public static void hanoi(int n) {
        if (n > 0) {
            process(n, "左", "右", "中");
        }
    }

    private static void process(int n, String start, String end, String other) {
        if (n == 1) {
            System.out.println("移动1号盘从" + start + "到" + end);
            return;
        }

        //每一层递归的逻辑都是，借助"目标柱子"，
        // 将n-1个 盘子移动到  "中转柱"，然后再将最后一个盘子移动到"目标柱子".
        //注意，这里的中转柱是会变化的。

        //把n-1 从 start移动到辅助杆，
        process(n - 1, start, other, end);
        //把n 移动到目标杆
        System.out.println("移动" + n + "号盘从" + start + "到" + end);
        //把n-1 从辅助杆移动到目标杆
        process(n - 1, other, end, start);
    }


    public static void printAllSubString(String str) {
        if (str == null || str.length() == 0) {
            return;
        }
        process2(str.toCharArray(), 0);
    }

    private static void process2(char[] charArray, int index) {
        if (index >= charArray.length) {
            System.out.println(String.valueOf(charArray));
            return;
        }
        process2(charArray, index + 1);
        char curCharNeedChoose = charArray[index];
        charArray[index] = 0;
        process2(charArray, index + 1);
        charArray[index] = curCharNeedChoose;
    }


    public static void main(String[] args) {
//        hanoi(3);
        printAllSubString("abc");
    }
}
